<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript">
    /*
     *在调用函数时，浏览器每次都会传递进两个隐含的参数
     *1.函数的上下文对象this
     *2.封装实参的对象arguments
     *-arguments是一个类数组对象
     *类数组，但不是数组，所以判断是否是数组类型的时候会显示false
     *在调用函数时，我们所传递的实参都会在arguments中保存
     *arguments.length可以用来获取实参的长度
     *我们即使不定义形参，也可以通过arguments来使用实参
     *只不过比较麻烦
     *arguments[0]表示第一个实参 []中的数字就代表数组的索引
     *他里边有一个属性叫做callee
     *这个属性对应一个函数对象，就是当前正在指向的函数的对象
     */
    function fun()
    {
        console.log(arguments);
        //检查是否是数组可以有两个办法
        console.log(arguments instanceof Array);//此时控制台输出false
        console.log(Array.isArray(arguments));//次数控制台也是输出false
        //检查是否属于对象
        console.log(arguments instanceof Object);//此时控制台输出true
        //检查arguments的长度
        console.log(arguments.length);
    }
    fun();
    fun("hello");//此时长度输出为1
    fun("hellon","rock");//此时长度输出为2

    function fun1()
    {
        console.log(arguments[0]);
        console.log(arguments[2]);
    }
    fun1("a","b","c");

    function fun2(a,b)
    {
        //console.log(arguments);
        //检查是否是数组可以有两个办法
        //console.log(arguments instanceof Array);//此时控制台输出false
        //console.log(Array.isArray(arguments));//次数控制台也是输出false
        //检查是否属于对象
        //console.log(arguments instanceof Object);//此时控制台输出true
        //检查arguments的长度
        //console.log(arguments.length);
        //console.log(arguments.callee);//次方法会在控制台显示出当前函数的所有代码
        console.log(arguments.callee == fun2);
        //callee代表当前函数，所以控制台显示true
    }
    fun2();
    </script>
</head>
<body>
    
</body>
</html>